unit unitmainform;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LR_Class, LR_DBSet, LR_Desgn, Forms, Controls,
  Graphics, Dialogs, Menus, DBGrids, pqconnection, sqldb, db, LCLIntf, Process;

type
  config = record
    host : string[50];
    db : string[20];
    user : string[20];
    passwd : string[20];
  end;

type

  { TMainForm }

  TMainForm = class(TForm)
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    frDesigner1: TfrDesigner;
    frReport1: TfrReport;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem16: TMenuItem;
    MenuItem17: TMenuItem;
    MenuItem18: TMenuItem;
    MenuItem19: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem20: TMenuItem;
    MenuItem21: TMenuItem;
    MenuItem22: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    OpenDialog1: TOpenDialog;
    PQConnection1: TPQConnection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormShow(Sender: TObject);
    procedure MenuItem11Click(Sender: TObject);
    procedure MenuItem12Click(Sender: TObject);
    procedure MenuItem13Click(Sender: TObject);
    procedure MenuItem14Click(Sender: TObject);
    procedure MenuItem15Click(Sender: TObject);
    procedure MenuItem16Click(Sender: TObject);
    procedure MenuItem17Click(Sender: TObject);
    procedure MenuItem18Click(Sender: TObject);
    procedure MenuItem19Click(Sender: TObject);
    procedure MenuItem20Click(Sender: TObject);
    procedure MenuItem21Click(Sender: TObject);
    procedure MenuItem22Click(Sender: TObject);
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    procedure MenuItem7Click(Sender: TObject);
    procedure MenuItem8Click(Sender: TObject);
    procedure ordenar_grid();
  private
    { private declarations }
  public
    nombre: string;
    apellido: string;
    edad_desde: string;
    edad_hasta: string;
    puesto: string;
    estado_civil: string;
    hijos: string;
  end;

var
  MainForm: TMainForm;
  archivo: file of config;
  registro: config;

implementation

uses
  unitconfaccdat, unitfiltropuesto, unitpuesto, unitadminpostulante, unitfiltroestadocivil, unitinicio;

{$R *.lfm}

{ TMainForm }

procedure TMainForm.ordenar_grid();
begin
  if SQLQuery1.Active = true then
    SQLQuery1.Close;

  SQLQuery1.SQL.Text := 'select * from vw_persona where prs_apellido ilike ''%' + apellido + '%'' and prs_nombre ilike ''%'
    + nombre + '%'' and pst_nombre ilike ''' + puesto + ''' and prs_edad >= ' + edad_desde + ' and prs_edad <= ' + edad_hasta
    + ' and prs_estado_civil ilike ''' + estado_civil + ''' and prs_hijos <= ' + hijos + ' order by prs_apellido';

  SQLQuery1.Open;

  DBGrid1.Columns[0].Title.Caption := 'Codigo';
  DBGrid1.Columns[1].Title.Caption := 'Apellido';
  DBGrid1.Columns[2].Title.Caption := 'Nombre';
  DBGrid1.Columns[4].Title.Caption := 'Edad';
  DBGrid1.Columns[6].Title.Caption := 'Dirección';
  DBGrid1.Columns[9].Title.Caption := 'Teléfono Fijo';
  DBGrid1.Columns[10].Title.Caption := 'Teléfono Movil';
  DBGrid1.Columns[14].Title.Caption := 'Estudios';
  DBGrid1.Columns[15].Title.Caption := 'Carrera';
  DBGrid1.Columns[18].Title.Caption := 'Postulación';

  DBGrid1.Columns[0].width := 60;
  DBGrid1.Columns[1].width := 100;
  DBGrid1.Columns[2].width := 110;
  DBGrid1.Columns[4].width := 40;
  DBGrid1.Columns[6].width := 240;
  DBGrid1.Columns[9].width := 100;
  DBGrid1.Columns[10].width := 110;
  DBGrid1.Columns[14].width := 160;
  DBGrid1.Columns[15].width := 185;
  DBGrid1.Columns[18].width := 180;

  DBGrid1.Columns[3].Visible := false;
  DBGrid1.Columns[5].Visible := false;
  DBGrid1.Columns[7].Visible := false;
  DBGrid1.Columns[8].Visible := false;
  DBGrid1.Columns[11].Visible := false;
  DBGrid1.Columns[12].Visible := false;
  DBGrid1.Columns[13].Visible := false;
  DBGrid1.Columns[16].Visible := false;
  DBGrid1.Columns[17].Visible := false;
  DBGrid1.Columns[19].Visible := false;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  while (FileExists('configuracion.dat') = False) do
  begin
    ShowMessage('SISTEMA SIN CONFIGURAR!');
    FormConfAccDat.ShowModal;
  end;

  AssignFile(archivo, 'configuracion.dat');
  Reset(archivo);
  Read(archivo, registro);
  CloseFile(archivo);

  PQConnection1.HostName := registro.host;
  PQConnection1.DatabaseName := registro.db;
  PQConnection1.Username := registro.user;
  PQConnection1.Password := registro.passwd;

  PQConnection1.Connected := True;

  FormInicio.ShowModal;

  apellido := '%';
  nombre := '%';
  edad_desde := '0';
  edad_hasta := '200';
  estado_civil := '%';
  puesto := '%';
  hijos := '100';

  ordenar_grid();
end;

procedure TMainForm.MenuItem11Click(Sender: TObject);
var
  cadena : string;
  posicion : integer;
  sinnombre : boolean;

begin
  posicion := 0;
  apellido := '';
  nombre := '';
  cadena := '';
  sinnombre := false;

  cadena := InputBox('Filtro por Nombre y Apellido:', 'Ingrese [parte del apellido] [parte del nombre]:', '');

  if cadena <> '' then
  begin
    posicion := pos(' ', cadena);

    if posicion = 0 then
    begin
      sinnombre := true;
      posicion := length(cadena) + 1;
    end;

    apellido := copy(cadena, 1, posicion - 1);
    delete(cadena, 1, posicion);
    nombre := cadena;

    if sinnombre = true then
      nombre := '%';

    ordenar_grid();
  end;
end;

procedure TMainForm.MenuItem12Click(Sender: TObject);
begin
  edad_desde := InputBox('Filtro por Edad', 'Ingrese EDAD DESDE', '');
  edad_hasta := InputBox('Filtro por Edad', 'Ingrese EDAD HASTA', '');

  if (edad_desde <> '') and (edad_hasta <> '') then
    ordenar_grid()
  else
  begin
    edad_desde := '0';
    edad_hasta := '200';
  end;
end;

procedure TMainForm.MenuItem13Click(Sender: TObject);
begin
  FormFiltroEstadoCivil.ComboBox1.Text := '';
  FormFiltroEstadoCivil.ShowModal;

  if FormFiltroEstadoCivil.ComboBox1.Text <> '' then
  begin
    estado_civil := FormFiltroEstadoCivil.ComboBox1.Text;
    ordenar_grid();
  end;
end;

procedure TMainForm.MenuItem14Click(Sender: TObject);
begin
  hijos := InputBox('Filtro por Cantidad de Hijos', 'Ingrese CANTIDAD MAXIMA DE HIJOS', '');

  if hijos <> '' then
    ordenar_grid()
  else
    hijos := '100';
end;

procedure TMainForm.MenuItem15Click(Sender: TObject);
begin
  FormFiltroPuesto.ShowModal;

  if FormFiltroPuesto.DBComboBox1.Text <> '' then
  begin
    puesto := FormFiltroPuesto.DBComboBox1.Text;
    ordenar_grid();
  end;
end;

procedure TMainForm.MenuItem16Click(Sender: TObject);
begin
  apellido := '%';
  nombre := '%';
  edad_desde := '0';
  edad_hasta := '200';
  estado_civil := '%';
  puesto := '%';
  hijos := '100';

  ordenar_grid();
end;

procedure TMainForm.MenuItem17Click(Sender: TObject);
begin
  FormConfAccDat.ShowModal;
  ShowMessage('Reinicie el programa para aplicar los cambios');
end;

procedure TMainForm.MenuItem18Click(Sender: TObject);
begin
  frReport1.Clear;
  frReport1.LoadFromFile('postulante.lrf');
  frReport1.DesignReport;
end;

procedure TMainForm.MenuItem19Click(Sender: TObject);
begin
  ShowMessage('Sistema BUDOF v1.0.0.2');
end;

procedure TMainForm.MenuItem20Click(Sender: TObject);
begin
  OpenDocument('LICENCIA.TXT');
end;

procedure TMainForm.MenuItem21Click(Sender: TObject);
begin
  OpenDocument('LEAME.TXT');
end;

procedure TMainForm.MenuItem22Click(Sender: TObject);
var
  comando : string;
  archivo : string;
  proceso : TProcess;

begin
  OpenDialog1.Filter := 'Archivos SQL|*.sql';
  OpenDialog1.Filename := 'budof_' + FormatDateTime('ddmmyyyy', date)
    + '.sql';
  OpenDialog1.Execute;

  archivo := OpenDialog1.FileName;

  comando := '.\backup.bat ' + registro.passwd + ' '
    + registro.host + ' ' + registro.user + ' '
    + archivo + ' ' + registro.db;
  proceso := TProcess.Create(nil);
  proceso.CommandLine := comando;
  proceso.Options := proceso.Options + [poWaitOnExit];
  proceso.Execute;
  proceso.Free;
end;

procedure TMainForm.DBGrid1CellClick(Column: TColumn);
begin
  FormAdminPostulante.Caption := 'Modificacion de datos de postulante...';
  FormAdminPostulante.Button1.Caption := 'Modificar';
  FormAdminPostulante.Button3.Visible := true;
  FormAdminPostulante.Label11.Visible := true;

  FormAdminPostulante.edad := SQLQuery1.FieldByName('prs_edad').AsString;
  FormAdminPostulante.cdg := SQLQuery1.FieldByName('prs_cdg').AsString;
  FormAdminPostulante.Edit1.Text := SQLQuery1.FieldByName('prs_apellido').AsString;
  FormAdminPostulante.Edit2.Text := SQLQuery1.FieldByName('prs_nombre').AsString;
  FormAdminPostulante.MaskEdit1.Text := SQLQuery1.FieldByName('prs_fecha_nacimiento').AsString;
  FormAdminPostulante.Edit3.Text := SQLQuery1.FieldByName('prs_dni').AsString;
  FormAdminPostulante.ComboBox1.Text := SQLQuery1.FieldByName('prs_estado_civil').AsString;
  FormAdminPostulante.Edit4.Text := SQLQuery1.FieldByName('prs_hijos').AsString;
  FormAdminPostulante.MaskEdit2.Text := SQLQuery1.FieldByName('prs_fecha_ingreso').AsString;
  FormAdminPostulante.Edit5.Text := SQLQuery1.FieldByName('prs_domicilio').AsString;
  FormAdminPostulante.Edit6.Text := SQLQuery1.FieldByName('prs_telefono_fijo').AsString;
  FormAdminPostulante.Edit7.Text := SQLQuery1.FieldByName('prs_telefono_movil').AsString;
  FormAdminPostulante.Edit8.Text := SQLQuery1.FieldByName('prs_email').AsString;
  FormAdminPostulante.Edit9.Text := SQLQuery1.FieldByName('prs_facebook').AsString;
  FormAdminPostulante.ComboBox2.Text := SQLQuery1.FieldByName('prs_estudios').AsString;
  FormAdminPostulante.Edit10.Text := SQLQuery1.FieldByName('prs_estudios_comentario').AsString;
  FormAdminPostulante.Memo1.Text := SQLQuery1.FieldByName('prs_experiencia_laboral').AsString;
  FormAdminPostulante.Memo2.Text := SQLQuery1.FieldByName('prs_texto').AsString;
  FormAdminPostulante.Memo3.Text := SQLQuery1.FieldByName('prs_caracteristicas_personales').AsString;
  FormAdminPostulante.pst_nombre := SQLQuery1.FieldByName('pst_nombre').AsString;

  FormAdminPostulante.ShowModal;

  ordenar_grid();
end;

procedure TMainForm.MenuItem2Click(Sender: TObject);
begin
  close();
end;

procedure TMainForm.MenuItem4Click(Sender: TObject);
begin
  FormPuesto.ShowModal;
end;

procedure TMainForm.MenuItem6Click(Sender: TObject);
begin
  FormAdminPostulante.Caption := 'Alta de Postulante';
  FormAdminPostulante.Button1.Caption := 'Guardar';
  FormAdminPostulante.ShowModal;
  ordenar_grid();
end;

procedure TMainForm.MenuItem7Click(Sender: TObject);
begin
  ShowMessage('Click en el Postulante a modificar...');
end;

procedure TMainForm.MenuItem8Click(Sender: TObject);
var
  cdg: string;

begin
  cdg := InputBox('Baja de Postulante', 'Ingrese el código del postulante a eliminar', '');

  if cdg <> '' then
  begin
    PQConnection1.ExecuteDirect('BEGIN WORK;');
    PQConnection1.ExecuteDirect('delete from persona where prs_cdg = ' + cdg);
    PQConnection1.ExecuteDirect('COMMIT WORK;');

    ShowMessage('Operación Exitosa!');

    ordenar_grid();
  end;
end;

end.

